چگونه برنامه هايمان را در برابر کرک ها مقاوم تر سازيم ؟

منبع: سايت برنامه نويس

1 – از اسامي با معني مانند زير استفاده نکنيد :

function RegistrationOK: Boolean;
هر چقدر هم که کدي را که در اين روال نوشته باشيد متبحرانه و هوشمند باشد Cracker ها آن را در کمتر از 20 ثانيه در هم خواهند کوبيد !!! خواه اين را باور کنيد يا نه .
راه ديگر اينست که در اين روال کدهاي برنامه را هم قرار دهيد . ( يعني بخشي از برنامه که ربطي هم به قفل ندارد ) در اين حالت اگر Cracker اين روال را غير فعال کند برنامه هم درست کار نخواهد کرد .

2 – از پيغامهاي nagscreens يا “Gotcha” استفاده نکنيد :

اين از اولين چيزهايي است که يک Cracker چک مي کند . آنها هيچوقت براي تجزيه و تحليل 300K برنامه شما وقت نخواهند گذاشت . بلکه به دنبال nag screens يا " مهلت استفاده مجاني تمام شده است " (Your evaluation time has expired!) خواهند گشت و از آنجا شروع به کار مي کنند . ( در ادامه درباره اين روش بيشتر بحث خواهيم کرد ) .
در بسياري موارد آنها موفق مي شوند که اين صفحه را از resource فايل اجرايي بر خواهند داشت و برنامه بدون اينکه صفحات شما رانشان بدهد بدرستي کار خواهد کرد . اگر واقعاً به وجود اينچنين صفحاتي نياز داريد آنها را در زمان اجرا و به طور دينامِک بسازيد . و پيغام هاي مبني بر اينکه برنامه رجيستر نشده است را در بخش معرفي (About) قرار دهيد . بعضي از برنامه نويسان اعتقاد دارند که نمايش صفحات nag کاربران را از برنامه متنفر مي کند و ... ( تو ايران از اين خبرها نيست )

3 – از اسامي با معني براي فايلها استفاده نکنيد :

مانند License.dat . چرا ؟ شماره 1 را دوباره بخوانيد .

4 – از روشهاي نامتقارن رمزگذاري استفاده کنيد :

تنها استقاده از اسامي غير معمول در اسامي فايلها کافي نيست . بلکه ترکيب با اين روش مي تواند مدتها آنها را سر کار بگذارد !!!

5 – از تاخير بلند استفاده کنيد (Long Delay) :

بلافاصله به کاربر پيغام رجيستر ندهيد و تا مدتي ( مثلاً يک يا دو روز ) آن را به تاخير بياندازيد . ( Cracker ها از اين موضوع نقرت دارند )

6 – از تاخير کوتاه استفاده کنيد : (Short Delay ) :

بعد از وارد کردن کلمه رمز يا هر روتين چک کننده يک يا دو ثانيه صبر کنيد تا جلوي حمله هاي brute force گرفته شود . ساده است ولي عالي کار مي کند . ( يا اينکه اگر کلمه رمز درست نبود مکث کنيد )

7 – از checksum هم در dll و هم در exe استفاده کنيد :

اين روش چندان هم مطمئن نيست ولي کار Cracker را سخت تر مي کند .

8 – برنامه تان را " خود ترميمي " بنويسيد :

اين همان چيزي است که در تصحيح خطاي مودم ها و هارد ديسکها استفاده مي شود . اين تکنولوژي قدمت زيادي دارد ولي کسي از آن در برنامه ها استفاده نمي کند ؟ فايده اين روش در اين است که اگر Cracker با يک decompiler کار کند ليستي را خواهد ديد که ديگر معتبر نبوده و اجرا نمي شود .

9 – براي برنامه خودتان patch بنويسيد :

کد خود را تغيير بدهيد تا هر بار روش چک کردن و روالهايش تغيير کند .

10 – شماره هاي سريال را در جاهاي غير متعارف نگهداري کنيد :

مثلاً در property يک فيلد بانک اطلاعاتي . حتما شنيده ايد که : به آنها يک نام dll بدهيد و در شاخه سيستم ويندوز نگهداري کنيد . آنقدر گفته و شنيده شده که ديگر ارزشي ندارد .

11 – شماره هاي سريال را در چند جا نگهداري کنيد :

( و تنها اگر اولي معتبر بود دومي را چک کنيد )

12 – از کلمات معروف استفاده نکنيد :

مانند اين : متاسفانه .... (Sorry . But ) اين هم جزو اولين چيزهايي است که چک مي شود . کلمات را ديناميکي بسازيد و يا آنها را به رمز درآوريد .

13 – Cracker را غرق کنيد :

با استفاده از فراخواني (call) هاي ساختگي و رشته هايي که خوب رمز شده اند . دام افکني لذت بخش است !!!

14 – از کلمات کيدي (reserve word) استفاده کنيد :

وقتي رشته يا رمزي را کد مي کنيد سعي کنيد مانند کلمات کليدي در بيايد مانند : “73AF” يا GetWindowText . اين باعث مي شود که DisAssembler ها به اشتباه بيافتند .

15 – از حالت غير فعال (disable) استفاده نکنيد :

اگر در حالت نمايشي برنامه شما اطلاعات را ذخيره نمي کند گذاشتن يک منوي خاکستري براي آن کافي نيست . بلکه کد هم نبايد در فايل exe شما موجود باشد . براي اين منظور از روش ساده زير مي توانيد استفاده کنيد :
{$IFDEF trial}
... کاري انجام ندهيد
{$ELSE}
... کارهاي لازم براي کاربران اصلي و يا نسخه کامل
{$ENDIF}

16 – چند نسخه از برنامه تان ايجاد کنيد :

{$IFDEF Anticrack_Method36}
.. روش تست قفل شماره 36
{$ENDIF}
با استفاده از روش فوق مي توانيد به سادگي چند نسخه از برنامه تان ايجاد کنيد و هر روش را بسادگي فعال / غير فعال کنيد ( با استفاده از DEFINE کردن هر کدام از روشها در ابتداي برنامه قبل از کامپايل ) و اين باعث مي شود که crack يکي از نسخه هاي برنامه تان براي ديگري کار نکند و Cracker بايد تمام نسخه ها را download و جداگانه crack کند يا اينکه اگر کاربر برنامه را از جايي متفاوت با cracker دريافت کند برنامه شما crack نخواهد شد !!! . و شما مي توانيد يک نسخه ويژه براي کاربران مجاز داشته باشيد که کد رجيستر آن براي نسخه آزمايشي کار نخواهد کرد .

17 – برنامه تان را بسرعت به روز کنيد (Update) :

اين باعث مي شود که کد برنامه تان تغيير کند و يک crack ساده براي نسخه بعدي شما کار نکند . و همينطور برنامه تان را در يک سايت عمومي براي دانلود نگذاريد . اين باعث مي شود که کنترل بيشتري بر روي برنامه تان داشته باشيد که از کجا دريافت مي شود و همينطور ساير افراد نمي توانند نسخه قبلي برنامه تان را که crack روي آن کار مي کند پيدا کنند . بله مي توانند برنامه شما را نيز به همراه crack آن ارائه کنند ولي اين باعث مي شود که هارد ديسک آنها بسرعت پر شود .

18 – کدهاي رجيستر موقت بسازيد :

وقتي کاربري ادعاي پرداخت پول کرد اين کد را که تنها 15 تا 30 روز کار خواهد کرد براي او بفرستيد . و تنها پس از اينکه مطمئن شديد پول به حسابتان واريز شده است کد اصلي و بدون محدوديت خود او را به او بدهيد . بدين صورت Cracker ها هم به اشتباه مي افتند . آنها گمان خواهند کرد که اين کد اصلي است و آنرا در سايت خود قرار خواهند داد در حاليکه اينطور نيست و آنها بين دوستان خود احمق جلوه خواهند کرد . اين موضوع به خصوص براي beta-tester ها مفيد است .

19 – از متد قوي براي کد کردن استفاده کنيد :

استفاده از يک xor ساده کافي نيست . از متدي استفاده کنيد که به راحتي برگشت پذير نباشد . ( اگر بتوانيد متد برگشت ناپذيري را پيدا کنيد چه بهتر و در ضمن متد برگشت ناپذير به روش يا روشهايي گفته مي شود که با داشتن حاصل عمليات و تمام متغيرها نتوان به عدد اوليه رسيد . به عنوان مثال عبارت ax+b برگشت پذير است زيرا با داشتن جواب 5 و مقادير a=2 و b=1 مي توان به مقدار x که همان 2 خواهد بود رسيد ) و هر دو روش کد گذاري و از کد درآوردن را در برنامه تان نگذاريد .

20 – چند نظر درباره قفلهاي وابسته به سخت افزار :

بعضي از روشهاي قفل گذاري شامل دريافت اطلاعاتي از سخت افزار کاربر مانند شماره سريال هارد ديسک يا checksum بايوس يا ... است . وقتي اين عدد يکبار محاسبه شد آن را در جايي ذخيره کنيد و سپس برنامه تان را اجرا کنيد يا موارد غير فعال را فعال کنيد . يا اينکه مي توانيد اين اطلاعات را کد گذاري کرده و به کاربر بگوييد آنها را براي شما بفرستد . سپس کد فعال سازي را ساخته و براي کاربر ارسال کنيد .
در ظاهر همه چيز خوب به نظر مي رسد هر چند اگر مطالب قبلي را خوانده باشيد مي دانيد که بهترين روش نيست ولي يک مشگل بزرگ در اين روش نياز به ارتباط دو طرفه بين شما و کاربران نهايي است که در مورد پروژه هاي بزرگ اصلا روش کارآمدي نيست .
هر بار که کاربر هارد ديسک خود را عوض مي کند يا تغييري در سخت افزار خود مي دهد و يا حتي هنگاميکه کامپيوتر جديدي مي خرد بايد کد فعال سازي جديدي از شما در خواست کند و اگر برنامه را چند ماه قبل خريده باشد ممکن است مدام در email خود نامه هايي با مضمون " چرا برنامه تان کار نمي کند؟ " را دريافت کنيد که منجر به عدم اطمينان کاربرانتان خواهد شد . پس پيش از استفاده از اين روش در مورد اين موارد خوب قکر کنيد . ( اين روش براي برنامه هاي ايراني به نظر من بهترين روش است بخصوص اگر از شماره سريال هارد استفاده شود همانطور که من هم 2 سالي هست که از اين روش استفاده مي کنم و براي مورد آخر نيز مي توانيد اين موضوع را در بخش about برنامه تان ذکر کنيد ) .

21 – و در نهايت وقت زيادي براي قفل گذاري برنامه هايتان نگذاريد :

به راستي قفل ها چقدر ارزش دارند ؟ آيا بهتر نيست زماني را که براي بهبود قفل خود صرف مي کنيد براي افزايش کارآيي برنامه تان بگذاريد ؟ مشگل شکسته شدن قفل برنامه تان چه ارزشي خواهد داشت وقتي کسي از آن استفاده نکند ؟ يا بدرد کسي نخورد ؟ فکر نکنيد کار شما بهترين در دنيا است .